package com.lancoo.cvas.pojo.vo;

import com.lancoo.cvas.entity.RuleTeachingClassProhibit;
import com.lancoo.cvas.entity.ScheduleConflictInfo;
import com.lancoo.cvas.entity.Teacher;
import com.lancoo.cvas.entity.TeachingClassWeek;
import com.lancoo.cvas.pojo.dto.ScheduleDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

@Data
@ApiModel("教学班排课信息")
public class TeachingClassCourseDto {
    @ApiModelProperty("教学班id")
    private Long teachingClassId;

    @ApiModelProperty("教学计划id")
    private Long teachingPlanId;

    @ApiModelProperty("任务id")
    private Integer taskId;

    @ApiModelProperty("教学班名称")
    private String teachingClassName;

    @ApiModelProperty("修读性质：1主修2辅修")
    private Integer studyNature;

    @ApiModelProperty("所属校区")
    private String campusId;

    @ApiModelProperty("校区名称")
    private String campusName;

    @ApiModelProperty("0无需选课 1在线选课;2:分级教学 3:预选教学班")
    private Integer teachingClassType;

    @ApiModelProperty("教学班容量-学生人数")
    private Integer classNum;

    @ApiModelProperty("是否可用 0 为不可用-已取消 1为可用-正常开班  2未设置")
    private Integer isEnable;

    @ApiModelProperty("课程id")
    private Long courseId;

    @ApiModelProperty("课程代码")
    private String courseCode;

    @ApiModelProperty("课程名称")
    private String courseName;

    @ApiModelProperty("课程学分")
    private Double credit;

    @ApiModelProperty("总学时")
    private Integer totalHour;

    @ApiModelProperty("讲授学时")
    private Integer lectureHour;

    @ApiModelProperty("实验学时")
    private Integer experimentalHour;

    @ApiModelProperty("上机学时")
    private Integer computerHour;

    @ApiModelProperty("其他学时")
    private Integer otherHour;


    @ApiModelProperty("课程类别id")
    private String courseTypeId;

    @ApiModelProperty("课程类别")
    private String courseType;

    @ApiModelProperty("课程性质 1必修  2选修")
    private Integer courseNature;

    @ApiModelProperty("专业性质，1:公共课，2:专业课")
    private Integer majorProp;

    @ApiModelProperty("选课总人数")
    private Integer studentAllNumber;

    @ApiModelProperty("选课人数")
    private Integer studentNumber;


    @ApiModelProperty("教学计划学院名称del")
    private String planCollegeName;

    @ApiModelProperty("专业id")
    private Long majorId;

    @ApiModelProperty("所属年级id")
    private String gradeId;

    @ApiModelProperty("基础平台专业id")
    private String baseMajorId;

    @ApiModelProperty("所属年级del")
    private String gradeName;

    @ApiModelProperty("行政班字符串")
    private String toClass;

    @ApiModelProperty("分班标识 非空表示分班")
    private String uniqueShiftSign;

    @ApiModelProperty("基础平台专业名字")
    private String majorName;
    @ApiModelProperty("授课方式")
    private Integer hourType;


    @ApiModelProperty("最低开班人数")
    private Integer minClassNum;

    @ApiModelProperty("方向名字del")
    private String majorVersionName;

    @ApiModelProperty("1已选 2未选//排课状态 1已排（正常）、2已排（未满足规则）、3已排（冲突）、4 待排")
    private Integer state;

    @ApiModelProperty("1未锁定  2锁定")
    private Integer isLocked;

    @ApiModelProperty("冲突原因")
    private String conflictReason;
    @ApiModelProperty("冲突信息")
    private List<ScheduleConflictInfo> conflicts;
//    @ApiModelProperty("冲突信息")
//    private List<ScheduleConflictInfo> conflicts = new ArrayList<>();

    @ApiModelProperty("参数设置")
    private List<TeachingClassWeek> courseWeeks;

    /**
     * 周次，用字符串表示二进制形式
     */
    @ApiModelProperty("周次")
    private String week;
    /**
     * 周学时
     */
    @ApiModelProperty("周学时")
    private Integer weekNum;
    /**
     * 连上节次
     */
    @ApiModelProperty("连上节次")
    private Integer connectSection;
    /**
     * 连上次数
     */
    @ApiModelProperty("连上次数")
    private Integer connectNumber;


    @ApiModelProperty("教室类型")
    private Integer roomType;

    @ApiModelProperty("教室id")
    private Long roomId;
    @ApiModelProperty("教室")
    private String roomName;


    @ApiModelProperty("教师列表")
    private List<Teacher> teachers;

    @ApiModelProperty("规则列表")
//    private List<UnSuitRuleVo> rules;
    private String rules;

    @ApiModelProperty("课表")
    List<ScheduleDto> schedules;


    @ApiModelProperty("教学班状态 0 已取消 1 可用 2 人数不足")
    public Integer flag;

    @ApiModelProperty("行政班id")
    private String classId;

    @ApiModelProperty("拆班id")
    private Integer subId;


}
